package xyz.ag.Servlet;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

import xyz.ag.Beans.Book;
import xyz.ag.Beans.Menu;
import xyz.ag.Beans.User;
import xyz.ag.Beans.Shoppingcart;
import xyz.ag.Service.BookServiceInterface;
import xyz.ag.Service.CartAndOrderServiceInterface;
import xyz.ag.Service.impl.BookServiceInterfaceImpl;
import xyz.ag.Service.impl.CartAndOrderServiceInterfaceImpl;
/**
 * 订单信息和购物车信息的接口
 * @author User
 *
 */
@WebServlet("*.car")
public class cartAndorder extends HttpServlet {
	CartAndOrderServiceInterface carAndDSI = new CartAndOrderServiceInterfaceImpl();
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String method0  = req.getServletPath();//获取路径
		String method = "";
		try {//路径处理
			 method = method0.substring(1,method0.length()-4);
		} catch (Exception  a) {
			 method = method0.substring(1,method0.length()-4);
		}
		if("addtocar".equals(method)) addtocar(req,resp);//添加到购物车
		if("shoppingcarknumber".equals(method)) shoppingcarknumber(req,resp);//获取购物车总数
		if("shopcarLoad".equals(method)) shopcarLoad(req,resp);//获得购物车总数
		if("shoppingcarknumberentryadd".equals(method)) shoppingcarknumberentryadd(req,resp);//页面上添加的时候触发
		if("shoppingcarknumberentrysub".equals(method)) shoppingcarknumberentrysub(req,resp);//页面上减去的时候触发
		if("shoppingcarknumberentryrem".equals(method)) shoppingcarknumberentryrem(req,resp);//页面上删除的时候触发
	
		
	}
	



	/**
	 * 页面添加函数 用来对单个条目进行减少的函数 由 前端进行触发  
	 * 之后返回json进行对比 
	 * Ajax的支持函数
	 * @param req
	 * @param resp
	 */
	private void shoppingcarknumberentryrem(HttpServletRequest req, HttpServletResponse resp) {
		// TODO 自动生成的方法存根
		resp.setContentType("json;charset=ustf-8");
		String entryID = req.getParameter("entryID");
		Integer i = carAndDSI.shoppingcarknumberentryrem(entryID);
		if(i<=0){
		try {
				resp.getWriter().write("{\"success\":\"-1\"}");
				} catch (IOException e) {
				System.err.println("总数获取异常");
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 页面添加函数 用来对单个条目进行减少的函数 由 前端进行触发  
	 * 之后返回json进行对比 
	 * Ajax的支持函数
	 * @param req
	 * @param resp
	 */
	private void shoppingcarknumberentrysub(HttpServletRequest req, HttpServletResponse resp) {
		// TODO 自动生成的方法存根
		resp.setContentType("json;charset=ustf-8");
		String entryID = req.getParameter("entryID");
		Integer i = carAndDSI.shoppingcarknumberentrysub(entryID);
		if(i>0){
		try {
				resp.getWriter().write("{\"success\":\"-1\"}");
				} catch (IOException e) {
				System.err.println("总数获取异常");
				e.printStackTrace();
			}
		}
	}

	/**
	 * 页面添加函数 用来对单个条目进行添加的函数 由 前端进行触发  
	 * 之后返回json进行对比 
	 * Ajax的支持函数
	 * @param req
	 * @param resp
	 */
	private void shoppingcarknumberentryadd(HttpServletRequest req, HttpServletResponse resp) {
		resp.setContentType("json;charset=ustf-8");
		String entryID = req.getParameter("entryID");
		Integer i = carAndDSI.shoppingcarknumberentryadd(entryID);
		if(i<0){
		try {
			resp.getWriter().write("{\"success\":\"-1\"}");
		} catch (IOException e) {
			System.err.println("总数获取异常");
			e.printStackTrace();
		}
	}
	}

	/**
	 * 添加购物车方法 
	 * 这里带2个参数回去 分别代表谁存的 存了什么 
	 * 后台返回一个值 是添加之后的物品总数
	 * user本身在session域中
	 * @param req
	 * @param resp
	 */
	private void addtocar(HttpServletRequest req, HttpServletResponse resp) {
		String bookname = req.getParameter("BookName");
		User user = (User) req.getSession().getAttribute("user");
		Integer i = carAndDSI.addtocar(bookname,user);
		try {
			resp.getWriter().write("{\"success\":\""+String.valueOf(i)+"\"}");
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
	
	
	/**
	 * ajax支持函数 用来返回一个用户购物车的总数
	 * @param req
	 * @param resp
	 */
	
	private void shoppingcarknumber(HttpServletRequest req, HttpServletResponse resp) {
		resp.setContentType("text");
		User user = (User) req.getSession().getAttribute("user");
		String s = carAndDSI.getshpooingcarListNmuber( user);
		System.out.println("获取购物车总数ok="+s);
		try {
			resp.getWriter().write(s);
		} catch (IOException e) {
			System.err.println("总数获取异常");
			e.printStackTrace();
		}
	}

	
	/**
	 * 这个接口应该返回一个json字符串
	 * 它负责携带一组字符串数组个参数进行回调函数的响应
	 * 来实现分页展示的效果
	 * @param req
	 * @param resp
	 */
	private void shopcarLoad(HttpServletRequest req, HttpServletResponse resp) {
		resp.setContentType("json/text;charset=utf-8");
		String page = req.getParameter("page");
		String number = req.getParameter("number");
		User user = (User) req.getSession().getAttribute("user");//和用户有关的操作有点多
		
		ArrayList<Shoppingcart> shoplist = carAndDSI.getShoppingcarLimitpageList(page,number,user);
		System.out.println("回调购物车="+shoplist.size());
		String jsons= JSON.toJSON(shoplist).toString();//构造JSno字符串
		try {
			resp.getWriter().write("{\"start\":\""+shoplist.size()+"\",\"jsons\":"+jsons+"}");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	

}
